home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / stdwin / Ports / mac / scrap.c < prev    next >
Text File  |  1995-12-21  |  2KB  |  136 lines

  1. /* Macintosh Scrap (Clipboard) Interface */
  2.  
  3. #include "macwin.h"
  4. #include <Scrap.h>
  5. #include <Memory.h>
  6.  
  7. static Handle hclip;
  8. static long lenclip;
  9.  
  10. /* _wfreeclip is called from wgetevent and from wsetclip. */
  11.  
  12. void
  13. _wfreeclip()
  14. {
  15.     if (hclip != NULL) {
  16.         HUnlock(hclip);
  17.         DisposHandle(hclip);
  18.         hclip= NULL;
  19.     }
  20. }
  21.  
  22. char *
  23. wgetclip()
  24. {
  25.     long offset;
  26.     
  27.     /* NB if the use of hclip or lenclip changes,
  28.        also change wgetcutbuffer() below !!! */
  29.     
  30.     if (hclip == NULL)
  31.         hclip= NewHandle(1L);
  32.     else
  33.         HUnlock(hclip);
  34.     lenclip= GetScrap(hclip, 'TEXT', &offset);
  35.     if (lenclip < 0)
  36.         return NULL;
  37.     SetHandleSize(hclip, lenclip+1);
  38.     HLock(hclip);
  39.     (*hclip)[lenclip]= EOS;
  40. #ifndef CLEVERGLUE
  41.     {
  42.     /* Convert imported \r into \n */
  43.         char *p= *hclip;
  44.         while ((p= strchr(p, '\r')) != NULL)
  45.             *p++ = '\n';
  46.     }
  47. #endif
  48.     return *hclip;
  49. }
  50.  
  51. void
  52. wsetclip(p, len)
  53.     char *p;
  54.     int len;
  55. {
  56.     int err;
  57. #ifndef CLEVERGLUE
  58.     /* Convert \n into \r before exporting.  Must make a copy, shit! */
  59.     char *q= malloc(len+1);
  60.     if (q != NULL) {
  61.         strncpy(q, p, len);
  62.         q[len]= EOS;
  63.         p= q;
  64.         while ((p= strchr(p, '\n')) != NULL)
  65.             *p++ = '\r';
  66.         p= q;
  67.     }
  68.     /* If there's no memory, export with \n's left in... */
  69. #endif
  70.     _wfreeclip();
  71.     err= ZeroScrap();
  72.     if (err != 0) dprintf("wsetclip: ZeroScrap error %d", err);
  73.     err= PutScrap((long)len, 'TEXT', p);
  74.     if (err != 0) dprintf("wsetclip: PutScrap error %d", err);
  75. #ifndef CLEVERGLUE
  76.     if (q != NULL)
  77.         free(q);
  78. #endif
  79. }
  80.  
  81. /* For "compatibility" with X11 STDWIN: */
  82.  
  83. int
  84. wsetselection(win, sel, data, len)
  85.     WINDOW *win;
  86.     int sel;
  87.     char *data;
  88.     int len;
  89. {
  90.     return 0;
  91. }
  92.  
  93. char *
  94. wgetselection(sel, plen)
  95.     int sel;
  96.     int *plen;
  97. {
  98.     return NULL;
  99. }
  100.  
  101. void
  102. wresetselection(sel)
  103.     int sel;
  104. {
  105. }
  106.  
  107. void
  108. wsetcutbuffer(ibuffer, data, len)
  109.     int ibuffer;
  110.     char *data;
  111.     int len;
  112. {
  113.     if (ibuffer == 0)
  114.         wsetclip(data, len);
  115. }
  116.  
  117. char *
  118. wgetcutbuffer(ibuffer, plen)
  119.     int ibuffer;
  120.     int *plen;
  121. {
  122.     if (ibuffer != 0)
  123.         return NULL;
  124.     if (wgetclip() == NULL)
  125.         return NULL;
  126.     /* This knows about the implementation of wgetclip() */
  127.     *plen = lenclip; /* NB: long --> int, may truncate... */
  128.     return *hclip;
  129. }
  130.  
  131. void
  132. wrotatecutbuffers(n)
  133.     int n;
  134. {
  135. }
  136.